iT邦幫忙

2023 iThome 鐵人賽

DAY 7
4
自我挑戰組

WiFiBoy Python 玩學機介紹系列 第 7

07. 控制LED 燈

  • 分享至 

  • xImage
  •  

LED 燈工作原理

還記得當初接觸 Arduino 類的開發版,書上就會用 LED 燈閃爍來當作第一個範例,如同學程式語言,第一個程式就是「Hello, world!」。開發板換成 ESP32 依然是會用同樣的範例教您,只要執行結果正確,就代表您的電路板接線正確,控制程式碼輸入正確且編譯成功,程式能正常燒入到開發板上。看到 LED 按照程式指示的方式閃爍,心中的成就感油然而生。

不過物聯網的軟硬體越學越多,才發現事情沒這麼簡單。許多問題就從腦袋浮現出來,最常問的大概有下列幾個:

  1. LED 是怎麼發光的?
  2. 電子零件有這麼多不同的LED 元件,元件上的規格要怎麼讀懂啊?
  3. 為什麼LED 元件不能直接接電源?要接一個限流電阻,經常是200歐姆。

LED 是怎麼發光的?

LED 發光原理不是三言兩語可以說明白。除了參考維基百科上「LED 」條目的介紹外,個人建議有興趣的同學可以參考 Youtube 上的「相比白炽灯,效率提升了10几倍!LED的工作原理,发光二极管到底是如何发光的呢?」教學影片。裡面用淺顯易懂的動畫說明,讓您可以逐漸讀懂 Wiki 上的解說。

電子零件有這麼多不同的LED 元件,元件上的規格要怎麼讀懂啊?

當您從電子材料行購買LED 材料時,您就會發現一個很驚人的事實。元件種類有夠多,但國中、高中課本裡根本沒介紹這麼多,規格標示讀不懂,要怎麼辦呢?最近筆者找到「LED芯片 | 不同種類的LED有什麼差別?通過測試讓你看清一切」這個教學影片,裡面有介紹市面上找得到的各種發光 LED 元件,非常值得讀者花點時間觀看。如果能做一點筆記,以後去買材料,就不會買錯或是不知道怎麼跟店員溝通。

LED 規格

為什麼LED 元件不能直接電源?要接限流電阻,經常是200 歐姆。

每一種顏色的LED 工作電壓均有不同:

  1. 白色: 3.1 ~ 4.0 V
  2. 紅色: 2.1 ~ 2.6 V
  3. 綠色: 3.3 ~ 3.9 V
  4. 藍色: 3.2 ~ 4.0 V
    而 ESP32 可以供應 5V 與 3.3V 的輸出,使用 5V 輸出,很明顯超過 LED 工作電壓上限,如果使用 3.3V 輸出,又無法讓大部份的LED 啟動。因此,我們必須使用 5V 的輸出電壓,加上一個電阻,將電壓調整到能啟動LED 又不會燒壞LED的電壓範圍。要如何計算呢?

根據歐姆定律 V = I * R ,我們此時假設要點亮紅色LED,5mm 的LED 需要的電流約為 0.02 安培,要搭配的電阻可這樣計算:

R = (5 – 2.1) / 0.02 = 145 歐姆,我們取整數值,為 150 歐姆。

那如果用 200 歐姆,則流經 LED 的電流是多少呢?

I = (5 – 2.1) / 200 = 0.0145 安培 < 0.02 安培,如果用 200 歐姆的電阻,LED 的亮度會暗一些,但依然可以正常點亮。

找電子零件不一定能剛好找到 150 歐姆的材料,所以就選比較容易找的 200歐姆電阻。

控制玩學機內建 LED 燈

根據技術文件可知,內建的LED 為腳位編號 16 ,因此我們寫程式時,要先設定輸出腳位為16,這樣才能點亮 LED 。

玩學機內建的LED

此時您將機器翻至背面,應該會發現內建的 LED 發出藍光。

那要怎麼讓他熄滅呢?請執行 「led.value(1)」,這樣 藍光LED 就會熄滅。

如何讓 LED 持續閃爍呢?

我們可以切換到 「BLOCKS」標籤,照著下圖編寫程式。點選執行後,您應該就會看到LED間隔一秒持續閃爍。

持續閃爍

而對應的程式則是:

import machine
import time
while True:
	pin = machine.Pin(16, 3).value(1)
	time.sleep(1)
	pin = machine.Pin(16, 3).value(0)
	time.sleep(1)

控制擴充介面連接的兩節七段顯示器

玩學運算科技有出一個兩位數的七段顯示器套件,可以提供國中技藝班或高職電子類學生實習使用。學生可以從零件焊接開始組裝起,學習七段顯示器的控制電路,最後用程式來讓七段顯示器來顯示指定的數字,未來,更可進階使用四位數的七段顯示器,完成時鐘或是倒數計時器等作品。

正面

反面

兩位數七段顯示器的控制腳位如下圖:

腳位圖

請試著顯示數字88

顯示數字88

請試著顯示 bb 字樣,相對應的 Python 程式如下:

import machine
machine.Pin(2,3).value(0)
machine.Pin(5,3).value(0)
machine.Pin(21,3).value(1)
machine.Pin(19,3).value(1)
machine.Pin(22,3).value(1)
machine.Pin(23,3).value(1)
machine.Pin(26,3).value(1)
machine.Pin(18,3).value(0)
machine.Pin(25,3).value(0)

如果要顯示兩位不同的數字要怎麼處理?

根據線路圖我們得知,兩個數字各段的線路都是相同,唯一不同只有小數點位置,其中 D1 代表左邊的數字,D2代表右邊的數字。例如我們要顯示「24」,就可以按照底下的方式處理。

步驟1

步驟2

這麼範例程式會有明顯的閃爍問題,您可以減少暫停的時間,例如0.05 變成 0.005 ,就會看起來同時顯示兩個數字。

講到這裡,我們先告一段落,明天我們將介紹「畫點、畫線、畫圖與秀圖」,明天見。


上一篇
06.鍵盤輸入值讀取與應用
下一篇
08. 畫點、畫線、畫圖與秀圖
系列文
WiFiBoy Python 玩學機介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言